home *** CD-ROM | disk | FTP | other *** search
/ Aminet 1 (Walnut Creek) / Aminet - June 1993 [Walnut Creek].iso / usenet / sources / volume89 / aplictns / crypt.1 < prev    next >
Text File  |  1989-11-13  |  16KB  |  442 lines

  1. Path: xanth!ukma!tut.cis.ohio-state.edu!gem.mps.ohio-state.edu!brutus.cs.uiuc.edu!wuarchive!texbell!texsun!newstop!sun!swap!page
  2. From: page%swap@Sun.COM (Bob Page)
  3. Newsgroups: comp.sources.amiga
  4. Subject: v89i215:  crypt - fast file encryption
  5. Message-ID: <127806@sun.Eng.Sun.COM>
  6. Date: 13 Nov 89 05:00:01 GMT
  7. Sender: news@sun.Eng.Sun.COM
  8. Lines: 431
  9. Approved: page@sun.com
  10.  
  11. Submitted-by: altger!vyrus@apple.com (David Vincenzetti)
  12. Posting-number: Volume 89, Issue 215
  13. Archive-name: applications/crypt.1
  14.  
  15. [uuencoded executable included.  ..bob]
  16.  
  17. # This is a shell archive.
  18. # Remove anything above and including the cut line.
  19. # Then run the rest of the file through 'sh'.
  20. # Unpacked files will be owned by you and have default permissions.
  21. #----cut here-----cut here-----cut here-----cut here----#
  22. #!/bin/sh
  23. # shar: SHell ARchive
  24. # Run the following text through 'sh' to create:
  25. #    extract.c
  26. #    main.c
  27. #    xrand.c
  28. #    crypt.doc
  29. #    makefile
  30. #    crypt.uu
  31. # This is archive 1 of a 1-part kit.
  32. # This archive created: Sun Nov 12 20:55:27 1989
  33. echo "extracting extract.c"
  34. sed 's/^X//' << \SHAR_EOF > extract.c
  35. X/* extract.c */
  36. X
  37. Xtypedef unsigned long        large;
  38. X
  39. X/*
  40. XSpeed is critical.
  41. XExtracts and returns a large number using some bits "bits" from its 
  42. Xfirst argument "n".
  43. X*/
  44. Xlarge
  45. Xextract(n, bits)
  46. Xregister large n;
  47. Xregister bits;
  48. X{
  49. X    large value;
  50. X    large mod;
  51. X    register large nn;
  52. X    register i;
  53. X    /* 128 bits are enough - static is faster */
  54. X    register char matrix[128];
  55. X
  56. X    if(bits > sizeof(matrix)) return(0);
  57. X
  58. X    mod = (large) 1 << bits;
  59. X    if(n < mod) return(n);
  60. X    while(n > mod << 1) n = n >> 1;
  61. X
  62. X    for (i = 0; n > 1; i++) {
  63. X        nn = n >> 1;
  64. X        matrix[i] = n - (nn << 1);
  65. X        n = nn;
  66. X    }
  67. X    i--;
  68. X
  69. X    bits--;
  70. X    value = 0;
  71. X    for(; i >= 0, bits >= 0; i--, bits--)
  72. X        if(matrix[i]) value += (large) 1 << bits;
  73. X
  74. X    return(value);
  75. X}
  76. SHAR_EOF
  77. echo "extracting main.c"
  78. sed 's/^X//' << \SHAR_EOF > main.c
  79. X/* main.c */
  80. X
  81. X#include <stdio.h>
  82. X
  83. X/*
  84. XIt is strongly raccomended that you choose a key as combination of uppercase
  85. Xand lowercase characters, digits and punctuation ("," and ".")
  86. X*/
  87. Xmain(ac, av)
  88. Xchar **av;
  89. X{
  90. X    char buf[1024];
  91. X    char *key;
  92. X    int i;
  93. X    int len;
  94. X
  95. X    if( !(key = av[1]) ) die("no key?");
  96. X    if(strlen(key) < 15 || Xsrand(key)) die("bad key.");
  97. X
  98. X    do {
  99. X        if( (len = read(0, buf, sizeof(buf))) == -1)
  100. X            die("read error.");
  101. X        for(i = 0; i < len; i++) buf[i] ^= Xrand(); /* too simple */
  102. X        if(write(1, buf, len) == -1) die("write error.");
  103. X    } while(len > 0);
  104. X}
  105. X
  106. Xdie(str)
  107. Xchar *str;
  108. X{
  109. X    fprintf(stderr, "Crypt: %s\n", str);
  110. X    exit(10);
  111. X}
  112. SHAR_EOF
  113. echo "extracting xrand.c"
  114. sed 's/^X//' << \SHAR_EOF > xrand.c
  115. X/* X-random number generator */
  116. X
  117. X#define KLEN    15    /* key length in bytes */
  118. X#define BITS    6    /* get lower bits */
  119. X#define TRUE    1L
  120. X#define FALSE    0L
  121. X
  122. Xtypedef unsigned long        large;
  123. X
  124. Xchar        *malloc();
  125. Xchar        *realloc();
  126. Xchar        *fgetline();
  127. Xlarge        compress();
  128. Xextern large    extract();
  129. X
  130. Xlarge C, B, XN, modulus;
  131. Xint W; /* word size */
  132. X
  133. X/*
  134. XRandomize given a 15 valid char key.
  135. X*/
  136. XXsrand(input)
  137. Xchar *input;
  138. X{
  139. X    char bits[KLEN * BITS];
  140. X    char key[KLEN];
  141. X
  142. X    setmem(key, sizeof(key), 0);
  143. X    strncpy(key, input, sizeof(key));
  144. X    setmem(input, strlen(input), 0); /* get rid of ps -f */
  145. X
  146. X    if(tokenize(key)) return(TRUE); /* illegalities */
  147. X    expand(key, bits);
  148. X
  149. X    C = compress(bits, 0, 29) << 1;        /* 30 bits */
  150. X    B = compress(bits, 30, 58) << 2;    /* 29 bits */
  151. X    XN = compress(bits, 59, 89);        /* 31 bits */
  152. X    /* modulus equal to (2 ^ (W - 1)); W is the word size */
  153. X    W = sizeof(modulus) * 8 - 1;
  154. X    modulus = (large) 1 << W;
  155. X
  156. X    if(!modulus) return(TRUE); /* should never happen */
  157. X    return(FALSE);
  158. X}
  159. X
  160. X/*
  161. XCheck key characters. Make things compact.
  162. X*/
  163. Xtokenize(key)
  164. Xchar *key;
  165. X{
  166. X    int i;
  167. X    char c;
  168. X
  169. X    for(i = 0; i < KLEN && (c = key[i]); i++) {
  170. X        if(c >= 48 && c <= 57) c -= 48;        /* [0-9] [0-9] */
  171. X        else if(c >= 65 && c <= 90) c -= 55;    /* [10-35] [A-Z] */
  172. X        else if(c >= 97 && c <= 122) c -= 61;    /* [36-61] [a-z] */
  173. X        else if(c == '.') c = 62;        /* [62] '.' */
  174. X        else if(c == ',') c = 63;        /* [63] ',' */
  175. X        else return TRUE;
  176. X
  177. X        key[i] = c;
  178. X    }
  179. X
  180. X    return FALSE;
  181. X}
  182. X
  183. X/*
  184. XExpand an array into bits, reading "BITS" bits from each character.
  185. X*/
  186. Xexpand(in, out)
  187. Xunsigned char *in;
  188. Xchar *out;
  189. X{
  190. X    int i, j;
  191. X    char c;
  192. X
  193. X    for(i = 0; i < KLEN; i++)
  194. X        for(j = 0; j < 8; j++) {
  195. X            c = (in[i] >> j) & 1;
  196. X            if(j < BITS) *out++ = c;
  197. X        }
  198. X}
  199. X
  200. X/*
  201. XCompress bits: suppose the "bits" buffer has the form: 0 0 1 1 0 1 :
  202. Xthe instruction: compress(bits, 1, 3) will return the binary
  203. Xsequence 0 1 1 converted into decimal.
  204. X*/
  205. Xlarge
  206. Xcompress(bits, start, end)
  207. Xchar *bits;
  208. Xint start;
  209. Xint end;
  210. X{
  211. X    large value;
  212. X    int i, j;
  213. X
  214. X    j = 0;
  215. X    value = 0;
  216. X    for(i = start; i <= end; i++) {
  217. X        if(bits[i]) value += (large) 1 << j;
  218. X        j++;
  219. X    }
  220. X    return(value);
  221. X}
  222. X
  223. X
  224. X/*
  225. XGenerate a random number. Currently only 8-bit numbers (bytes).
  226. X*/
  227. XXrand()
  228. X{
  229. X    register large A;
  230. X    static large XNplus;
  231. X
  232. X    A = B + 1;
  233. X
  234. X    XNplus = (XN * A + C) % modulus;
  235. X    XN = XNplus;
  236. X
  237. X    return(extract(XNplus, 8)); /* wanna bytes */
  238. X}
  239. SHAR_EOF
  240. echo "extracting crypt.doc"
  241. sed 's/^X//' << \SHAR_EOF > crypt.doc
  242. X#:ts=8
  243. X
  244. X    Crypt v1.0    David Vincenzetti 8910.15 - vyrus@altger
  245. X
  246. X    Crypt reads from the standard input and writes on the standard
  247. Xoutput. You have to supply a key as first argument, valid characters for
  248. Xthe key are upper and lowercase characters, digits and punctuation.
  249. X    The security of encrypted files depends on three factors: the
  250. Xfundamental method must be hard to solve; direct search of the key space
  251. Xmust be infeasible; 'sneak paths' by which keys or clear text can become
  252. Xvisible must be minimized. The program fully futfils these requirements.
  253. X
  254. X    The kernel of the cipher consists of a Linear Congruential random
  255. Xnumber generator as introduced by Knuth in his trilogy "The Art of
  256. XComputer Programming". The period is maximum equal to 2**31, the seed
  257. Xis a sequence of 90 bits extracted from the key and therefore there are
  258. X2**90 combinations at all. I have been studying the algorithm and some
  259. Xalgebra theorems for a long time to develop a cipher which was simple
  260. Xto understand, fast and suitable for most computer applications.
  261. XNo doubt the choice of key and key security are, as usually occours
  262. Xwhen we deal with human behaviour, the most vulnerable aspect of Crypt.
  263. X
  264. X    Version 1.0, released on impetus after Cbc1.0, a block chaining
  265. Xcipher which uses Data Encryption Standard, very secure but too slow for
  266. Xfile encryption. Most features which I would like to see in a real
  267. Xcrypt-o-program are missing here, I will do better in a future version:-))
  268. X
  269. XAlmost forgotten: this is public domain, do whatever you want just do not
  270. Xuse commercially and notify me for changes or enhancements you might make.
  271. XWhen hacking the source code beware of modifying the algorithm logic:
  272. Xsmall changes can completely compromise security, complexity does not
  273. Xmean strength: things obscure to you will be transparent to the analyst.
  274. X
  275. XEnjoy this program, math and your life.
  276. X
  277. SHAR_EOF
  278. echo "extracting makefile"
  279. sed 's/^X//' << \SHAR_EOF > makefile
  280. X# :ts=8
  281. X#    Working about Xrand random number generator
  282. X#        David Vincenzetti        8910.12
  283. X
  284. XSRC = main.c xrand.c extract.c makefile crypt.doc
  285. XOBJ = main.o xrand.o extract.o
  286. XCFLAGS = -n
  287. X
  288. Xcrypt: $(OBJ)
  289. X    ln $(OBJ) -g -o crypt -ll -lc
  290. Xcopy:
  291. X    shell -c cp -u $(SRC) ws:crypt
  292. SHAR_EOF
  293. echo "extracting crypt.uu"
  294. sed 's/^X//' << \SHAR_EOF > crypt.uu
  295. X
  296. Xbegin 644 crypt.exe
  297. XM```#\P`````````#``````````(```5:````L0````$```/I```%6D[Z!.1.5
  298. XM5?OX(&T`"BMH``3[_&8*2'H`I$ZZ`,I83R\M^_Q.N@/B6$^P?``/;0XO+?O\L
  299. XM3KH`XEA/2D!G"DAZ`(1.N@"B6$\_/`0`2&W\`$)G3KH$$E!/.T#[^+!\__]FW
  300. XM"$AZ`&EA?EA/0FW[^F`8,"W[^D'M_`#0P"\(3KH"KB!?L1!2;?OZ,"W[^K!MS
  301. XM^_AMWC\M^_A(;?P`/SP``4ZZ$2A03[!\__]F"$AZ`"UA-EA/2FW[^&Z03EU.0
  302. XM=6YO(&ME>3\`8F%D(&ME>2X`<F5A9"!E<G)O<BX`=W)I=&4@97)R;W(N`$Y52
  303. XM```O+0`(2'H`'$AL@,).N@,V3^\`##\\``I.NA&<5$].74YU0W)Y<'0Z("5S2
  304. XM"@``3E7_ED)G/SP`#TAM_Y=.N@+R4$\_/``/+RT`"$AM_Y=.N@=23^\`"D)GF
  305. XM+RT`"$ZZ`L!83S\`+RT`"$ZZ`L903TAM_Y=.N@""6$]*0&<&<`%.74YU2&W_M
  306. XMIDAM_Y=.N@$44$\_/``=0F=(;?^F3KH!7%!/XX`I0()F/SP`.C\\`!Y(;?^FH
  307. XM3KH!1%!/Y8`I0()J/SP`63\\`#M(;?^F3KH!+%!/*4"";CE\`!^"=C`L@G9(?
  308. XMP'(!X:$I08)R2JR"<F8$<`%@C'``8(A.5?_\0FW__F```((,+0`P__UM$`PMC
  309. XM`#G__6X(!"T`,/_]8%8,+0!!__UM$`PM`%K__6X(!"T`-__]8#X,+0!A__UM[
  310. XM$`PM`'K__6X(!"T`/?_]8"8,+0`N__UF"!M\`#[__6`6#"T`+/_]9@@;?``_B
  311. XM__U@!G`!3EU.=3`M__X@;0`($:W__0``4FW__@QM``___FP2,"W__B!M``@;S
  312. XM<```__UF`/]H<`!@S$Y5__I";?_^0FW__#`M__X@;0`(<@`2,```,"W__.!I+
  313. XMPGP``1M!__L,;0`&__QL#"!M``Q2K0`,$*W_^U)M__P,;0`(__QMQ%)M__X,1
  314. XM;0`/__YMM$Y=3G5.5?_X0FW_^$*M__P[;0`,__I@)#`M__H@;0`(2C```&<.]
  315. XM,"W_^$C`<@'AH=.M__Q2;?_X4FW_^C`M__JP;0`.;](@+?_\3EU.=4Y5```O$
  316. XM!"@L@FI2A"($("R";DZZ!6[0K()F(BR"<DZZ"B8I0():*6R"6H)N/SP`""\L9
  317. XM@EI.N@`*7$\H'TY=3G5.5?]X2.</`"@M``@Z+0`,NGP`@&,*<`!,WP#P3EU.=
  318. XM=3`%2,!R`>&A*T'_^+BM__AD!"`$8.(@+?_XXX"X@&,$XHQ@\GX`8!@L!.*.0
  319. XM(`;C@"($DH!![?]X$8%P`"@&4D>XO`````%BX%-'4T5"K?_\8!I![?]X2C!P+
  320. XM`&<,,`5(P'(!X:'3K?_\4T=31;Y\``!*16S>("W__&``_WX@;P`$(`A*&&;\)
  321. XMD<`@"%.`3G4@;P`$3*\``P`(8`(0P5'(__Q.=4Y5```I;0`(@EY(;0`0+RT`T
  322. XM#$AZ``Y.N@7.3^\`#$Y=3G5.50``+RR"7C\M``A.N@EZ7$].74YU3E4``$CGW
  323. XM#"`X+0`(3KH-TC`$P?P`!B1`U>R">$I$;0JX;().;`1*DF80.7P``H)\</],!
  324. XMWP0P3EU.=3`J``3`?``#L'P``68*.7P`!8)\</]@X'``,"T`#B\`+RT`"B\23
  325. XM3KH/M"H`L+S_____3^\`#&8,3KH/>#E`@GQP_V"T(`5@L&%P0^R"6D7L@EJUU
  326. XMR68.,CP`&FL(=``BPE')__PI3X)^+'@`!"E.@H)(YX"`""X`!`$I9Q!+^@`(7
  327. XM3J[_XF`&0J?S7TYS0_H`($ZN_F@I0(*&9@PN/``#@`=.KO^48`1.N@`:4$].7
  328. XM=61O<RYL:6)R87)Y`$GY``!__DYU3E4``"\*2'D``0``,"R"3L'\``8O`$ZZD
  329. XM#U8I0()X4$]F%$*G2'D``0``3KH/&E!/+FR"?DYU(&R">$)H``0@;()X,7P`@
  330. XM`0`0(&R">#%\``$`"B!L@GX@+()^D*@`!%"`*4""BB!L@HH@O$U!3EA"ITZZ!
  331. XM#PHD0$JJ`*Q83V<N+RT`#"\M``@O"DZZ`*XY?``!@HX@;()X`&B````$(&R":
  332. XM>`!H@```"D_O``Q@0DAJ`%Q.N@\D2&H`7$ZZ#N8I0(*0(&R"D$JH`"103V<0N
  333. XM(&R"D")H`"0O$4ZZ#?A83R\L@I`O"DZZ`HPI;(*0@I103TZZ#?@@;()X((!.9
  334. XMN@X8(&R">"%```9G%DAX`^U(>@`J3KH-]"!L@G@A0``,4$\O+(*4/RR"F$ZZ_
  335. XM^7Y"9TZZ#!)03R1?3EU.=2H`3E4``$CG##`D;0`0(&T`"$JH`*QG&"!M``@@6
  336. XM*`"LY8`H`"!$("@`$.6`)D!@!"9L@E`0$TB`2,#0K0`,5(`Y0(*:0J<P+(*:V
  337. XM2,`O`$ZZ#>@I0(*<4$]F"$S?##!.74YU$!-(@#H`/P4@2U*(+P@O+(*<3KH!$
  338. XM?C`%2,`@0-'L@IQ#^@%$$-EF_#\M``XO"B\L@IQ.N@$Z(&R"G$(P4``Y?``!4
  339. XM@I@P!4C`T*R"G"9`4HLD2T_O`!00$TB`.@"P?``@9QBZ?``)9Q*Z?``,9PRZ,
  340. XM?``-9P:Z?``*9@12BV#8#!,`(&UZ#!,`(F8N4HL@2U*+$!!(@#H`9QX@2E**"
  341. XM$(6Z?``B9A`,$P`B9@12BV`&0BK__V`"8-9@."!+4HL0$$B`.@!G)KI\`"!G?
  342. XM(+I\``EG&KI\``QG%+I\``UG#KI\``IG""!*4HH0A6#.($I2BD(02D5F`E.+Z
  343. XM4FR"F&``_UI"$D*G,"R"F%)`2,#E@"\`3KH,QBE`@I103V8(0FR"F&``_MAZ0
  344. XM`"9L@IQ@)#`%2,#E@"!L@I0ABP@`($L@"$H89OR1P%.(,`A20$C`U\!21;IL5
  345. XM@IAMUC`%2,#E@"!L@I1"L`@`8`#^E"``,#Q__V`$,"\`#"!O``1*&&;\4T@BZ
  346. XM;P`(4T`0V5?(__QG`D(0("\`!$YU3.\#```$(`@R+P`,8`(0V5?)__QG!E)!;
  347. XM8`)"&%')__Q.=4CG<``T`<3`)@%(0\;`2$-"0]2#2$#`P4A`0D#0@DS?``Y.W
  348. XM=4Y5``!(YPXP)&T`"$*G2'H`CDZZ#"@I0(*@4$]F"$S?#'!.74YU(&T`#")HC
  349. XM`"0O*0`$3KH,6"@`6$]G4DAZ`&T@1"\H`#9.N@PJ)D!*@%!/9S1(>`/M+PM.T
  350. XMN@LZ+`!03V<D(`;E@"H`($4E:``(`*0E1@"<2'@#[4AZ`#A.N@L6)4``H%!/F
  351. XM+P1.N@OV6$\O+(*@3KH+6D*L@J!83V"`:6-O;BYL:6)R87)Y`%=)3D1/5P`JR
  352. XM`$Y5``!(YP@@)&T`#@QM``0`$F8((&T`""@08!Q*;0`,;PP@;0`(<``P$"@`*
  353. XM8`H@;0`(,!!(P"@`0FT`$DIM``QL$$1M``Q*A&P(1(0[?``!`!(R+0`,2,$@4
  354. XM!$ZZ`Y!![(`"4XH4L```,BT`#$C!(`1.N@.&*`!FVDIM`!)G!E.*%+P`+2`*Z
  355. XM3-\$$$Y=3G5.5?\B2.<(,"1M``@F;0`,0FW_^BMM`!#__"!+4HL0$$B`.`!GJ
  356. XM``+NN'P`)68``LQ"+?\P.WP``?_X.WP`(/_V.WPG$/_T($M2BQ`02(`X`+!\+
  357. XM`"UF#D)M__@@2U*+$!!(@#@`N'P`,&80.WP`,/_V($M2BQ`02(`X`+A\`"IF1
  358. XM&"!M__Q4K?_\.U#_\B!+4HL0$$B`.`!@,D)M__)@'#`M__+!_``*T$20?``P3
  359. XM.T#_\B!+4HL0$$B`.``P!%)`0>R`%`@P``(``&;4N'P`+F9:($M2BQ`02(`X9
  360. XM`+!\`"IF&"!M__Q4K?_\.U#_]"!+4HL0$$B`.`!@,D)M__1@'#`M__3!_``*%
  361. XMT$20?``P.T#_]"!+4HL0$$B`.``P!%)`0>R`%`@P``(``&;4.WP``O_PN'P`]
  362. XM;&82($M2BQ`02(`X`#M\``3_\&`0N'P`:&8*($M2BQ`02(`X`#`$2,!@>CM\G
  363. XM``C_[F`6.WP`"O_N8`X[?``0_^Y@!CM\__;_[C\M__!(;?\P/RW_[B\M__Q.W
  364. XMNOWD*T#_ZC`M__!(P-&M__Q/[P`,8%P@;?_\6*W__")0*TG_ZB`)2AEF_)/`:
  365. XM4XD[2?_P8$H@;?_\5*W__#@00>W_+RM(_^H0A&`HD+P```!C9^)3@&>2D+P`I
  366. XM```+9P#_<EF`9[)5@&<`_W!7@&<`_W)@S$'M_S"1[?_J.TC_\#`M__"P;?_TM
  367. XM;P8[;?_T__!*;?_X9V@@;?_J#!``+6<*(&W_Z@P0`"MF+@QM`##_]F8F4VW_F
  368. XM\B!M_^I2K?_J$!!(@#\`3I*P?/__5$]F"G#_3-\,$$Y=3G5@%C\M__9.DK!\;
  369. XM__]43V8$</]@Y%)M__HP+?_R4VW_\K!M__!NW$)M_^Y@("!M_^I2K?_J$!!(M
  370. XM@#\`3I*P?/__5$]F!'#_8+!2;?_N(&W_ZDH09PHP+?_NL&W_]&W.,"W_[M%M?
  371. XM__I*;?_X9BA@&#\\`"!.DK!\__]43V8&</]@`/]X4FW_^C`M__)3;?_RL&W_Z
  372. XM\&[:8!8_!$Z2L'S__U1/9@9P_V``_U)2;?_Z8`#]"#`M__I@`/]"2.=(`$*$[
  373. XM2H!J!$2`4D1*@6H&1($*1``!83Y*1&<"1(!,WP`22H!.=4CG2`!"A$J`:@1$^
  374. XM@%)$2H%J`D2!81H@`6#8+P%A$B`!(A]*@$YU+P%A!B(?2H!.=4CG,`!(04I!0
  375. XM9B!(038!-`!"0$A`@,,B`$A`,@*"PS`!0D%(04S?``Q.=4A!)@$B`$)!2$%('
  376. XM0$)`=`_0@-.!MH%B!)*#4D!1RO_R3-\`#$YU3E4``"\$."T`""\M``H_!$ZZG
  377. XM`#"X?``*7$]F)"!M``H0*``,2(`(```'9Q0_//__+RT`"DZZ`/1<3R@?3EU.6
  378. XM=6#X3E4``"\*)&T`"B!2L>H`!&48,"T`",!\`/\_`"\*3KH`R%Q/)%].74YU6
  379. XM(%)2DA`M``D0@$B`P'P`_V#H3E4``"\*0>R`EB1(($K5_````!8O"&$06$]!C
  380. XM[().M<AEZB1?3EU.=4Y5``!(YP@@)&T`"'@`(`IF"G#_3-\$$$Y=3G5**@`,Z
  381. XM9U`(*@`"``QG##\\__\O"F%2.`!<3Q`J``U(@#\`3KH%'(A`""H``0`,5$]GZ
  382. XM"B\J``A.N@(N6$\(*@`%``QG$B\J`!).N@+`+RH`$DZZ`A103T*20JH`!$*J3
  383. XM``A"*@`,,`1@D$Y5__Y(YP@@)&T`"$'Z_T8I2(*D""H`!``,9PIP_TS?!!!.Z
  384. XM74YU""H``@`,9S`@4I'J``@X"#\$+RH`"!`J``U(@#\`3KH"@+!$4$]G$`CJD
  385. XM``0`#$*20JH`!'#_8,`,;?__``QF$`BJ``(`#$*20JH`!'``8*A*J@`(9@@OQ
  386. XM"DZZ`)I83PQJ``$`$&8J&VT`#?__/SP``4AM__\0*@`-2(`_`$ZZ`B*P?``!3
  387. XM4$]FH#`M``Q@`/]J)*H`"#`J`!!(P-"J``@E0``$".H``@`,(%)2DA`M``T0Z
  388. XM@$B`P'P`_V``_SY.50``+PI![("6)$A**@`,9QC5_````!9![().M<AE"'``H
  389. XM)%].74YU8.)"DD*J``1"J@`((`I@ZDY5__PO"B1M``@_/`0`3KH`P"M`__Q40
  390. XM3V88-7P``0`0($K1_`````XE2``()%].74YU-7P$```0".H``0`,)6W__``(3
  391. XM$"H`#4B`/P!.N@#B2D!43V<&`"H`@``,8,Y.50``2.<`,"1L@F)@%"92("H`B
  392. XM!%"`+P`O"DZZ!%Q03R1+(`IFZ$*L@F),WPP`3EU.=4Y5```O"D'Z_\8I2(*H8
  393. XM0J<@+0`(4(`O`$ZZ!`HD0$J`4$]F"'``)%].74YU)*R"8B5M``@`!"E*@F(@X
  394. XM"E"`8.9.50``<``P+0`(+P!ALEA/3EU.=4Y5``!(YP`PE\LD;()B8`X@;0`(*
  395. XM48BQRF<2)DHD4B`*9NYP_TS?#`!.74YU(`MG!":28`0I4H)B("H`!%"`+P`O2
  396. XM"DZZ`ZYP`%!/8-A.50``+PHP+0`(P?P`!B1`U>R">$IM``AM#C`M``BP;().X
  397. XM;`1*DF8..7P``H)\</\D7TY=3G4P+0`(P?P`!B!L@G@O,`@`3KH"QDJ`6$]G2
  398. XM!'`!8`)P`SE4``"\M``A.N@*02H!83V8.3KH"FCE`@GQP_TY=3G5P`&#X%
  399. XM3E4``$CG#"`X+0`(3KH`<#`$P?P`!B1`U>R">$I$;0JX;().;`1*DF80.7P`I
  400. XM`H)\</],WP0P3EU.=3`J``3`?``#9@HY?``%@GQP_V#D<``P+0`.+P`O+0`*D
  401. XM+Q).N@)T*@"PO/____]/[P`,9@Q.N@(:.4""?'#_8+@@!6"T3E7__$AX$`!"8
  402. XMITZZ`M@K0/_\"```#%!/9Q)*;(*.9@@@+?_\3EU.=4ZZ``9P`&#T3E4``$AXZ
  403. XM``1(>@`<3KH!\"\`3KH"$#\\``%.N@`.3^\`#DY=3G5>0PH`3E4``$JL@J1G!
  404. XM!B!L@J1.D#\M``A.N@`(5$].74YU3E7__"\$,"T`"$C`*T#__$JL@GAG*'@`&
  405. XM8`H_!$ZZ`/Y43U)$N&R"3FWP,"R"3L'\``8O`"\L@GA.N@'Z4$]*K(*H9P8@_
  406. XM;(*H3I!*K()49PHO+()43KH!=EA/2JR"K&<((&R"K""L@K!*K(*T9PHO+(*T!
  407. XM3KH!DEA/2JR"N&<*+RR"N$ZZ`8)83TJL@KQG"B\L@KQ.N@%R6$]*K(+`9PHOB
  408. XM+(+`3KH!8EA/+'@`!`@N``0!*6<4+PU+^@`*3J[_XBI?8`9"I_-?3G-*K(*0B
  409. XM9C!*K(*<9R@P+(*:2,`O`"\L@IQ.N@%2,"R"F%)`2,#E@"\`+RR"E$ZZ`3Y/G
  410. XM[P`08`Y.N@$L+RR"D$ZZ`5A83R`M__PN;()^3G4H'TY=3G5.50``2.<.(#@M6
  411. XM``@P!,'\``8D0-7L@GA*1&T*N&R"3FP$2I)F$#E\``*"?'#_3-\$<$Y=3G4(2
  412. XM*@`'``1F""\23KH`"EA/0I)P`&#B(B\`!"QL@H9.[O_<(B\`!"QL@H9.[O^"A
  413. XM(B\`!"QL@H9.[O^X+&R"AD[N_\HL;(*&3N[_?"(O``0L;(*&3N[_*$SO``8`]
  414. XM!"QL@H9.[O_B+&R"AD[N_\1,[P`.``0L;(*&3N[_UD[Z``(B+P`$+&R"AD[N9
  415. XM_Z9,[P`.``0L;(*&3N[_T$CG`01,[R"```PL;(*"3J[_E$S?((!.=4[Z``(B=
  416. XM;P`$+&R"@D[N_F),[P`#``0L;(*"3N[_.B)O``0L;(*"3N[^VBQL@H).[O]\6
  417. XM(F\`!"`O``@L;(*"3N[_+B!O``0L;(*"3N[^C"QL@H(B;P`$("\`"$[N_=@BA
  418. XM;P`$+&R"@D[N_H9,[P`#``0L;(*"3N[^SB!O``0L;(*"3N[^@$SO`P``!"QLX
  419. XM@J!.[O^@(&\`!"QL@J!.[O^F(&\`!"QL@J!.[O^R```#[`````$````!```%;
  420. XM6@````````/R```#Z@```)8P,3(S-#4V-S@Y86)C9&5F````("`@("`@("`@4
  421. XM,#`P,#`@("`@("`@("`@("`@("`@(""00$!`0$!`0$!`0$!`0$!`#`P,#`P,(
  422. XM#`P,#$!`0$!`0$`)"0D)"0D!`0$!`0$!`0$!`0$!`0$!`0$!`4!`0$!`0`H*.
  423. XM"@H*"@("`@("`@("`@("`@("`@("`@("0$!`0"```````````````````0``Q
  424. XM```!``````````````````````$!`````0`````````````````````!`@``'
  425. XM``$`````````````````````````````````````````````````````````!
  426. XM`````````````````````````````````````````````````````````````
  427. XM`````````````````````````````````````````````````````````````
  428. XM`````````````````````````````````````````````````````````````
  429. XM`````````````````````````````````````````````````````````````
  430. XM`````````````````````````````````````````````````````````````
  431. XM`````````````````````````````````````````````````````````````
  432. XM`````````````````````````````````````````````````````````````
  433. XM````````````````````````````%`````````````````/R```#ZP````$`X
  434. X#``/RU
  435. X``
  436. Xend
  437. Xsize 6168
  438. SHAR_EOF
  439. echo "End of archive 1 (of 1)"
  440. # if you want to concatenate archives, remove anything after this line
  441. exit
  442.